package com.example.controller;

// 引入必要的依赖
import com.example.common.Result; // 自定义的响应结果类
import com.example.entity.Admin; // 管理员实体类
import com.example.service.AdminService; // 管理员服务接口
import jakarta.annotation.Resource; // 用于依赖注入的注解
import org.springframework.web.bind.annotation.*; // Spring MVC注解包

// 声明这是一个RESTful风格的控制器
@RestController
public class WebController {

    // 使用@Resource注解自动装配AdminService的bean
    @Resource
    private AdminService adminService;

    /*
     * 默认请求接口
     * 当访问根路径("/")时，返回成功的响应结果
     */
    @GetMapping("/")
    public Result hello() {
        return Result.success(); // 调用Result类的success方法返回成功响应
    }

    /*
     * 登录接口
     * 当POST请求发送到"/login"时，接收一个Admin对象作为请求体
     * 如果该管理员的角色是"ADMIN"，则调用adminService的login方法进行登录验证
     * 并返回登录结果
     */
    @PostMapping("/login")
    public Result login(@RequestBody Admin admin) {
        Admin login = null; // 声明一个临时的Admin对象用于存储登录结果
        if ("ADMIN".equals(admin.getRole())) { // 检查管理员角色是否为"ADMIN"
            login = adminService.login(admin); // 调用服务层的login方法进行登录验证
        }
        return Result.success(login); // 返回登录结果，如果登录成功，login对象不为null
    }

    /*
     * 注册接口
     * 当POST请求发送到"/register"时，接收一个Admin对象作为请求体
     * 调用adminService的add方法将管理员添加到数据库
     * 并返回成功的响应结果
     */
    @PostMapping("/register")
    public Result register(@RequestBody Admin admin) {
        adminService.add(admin); // 调用服务层的add方法进行注册
        return Result.success(); // 返回成功的响应结果
    }

    /*
     * 检查邮箱是否存在的接口
     * 当GET请求发送到"/check/email"时，接收一个email参数
     * 调用adminService的existEmail方法检查该邮箱是否已存在
     * 如果邮箱已存在，返回错误的响应结果；否则，返回成功的响应结果
     */
    @GetMapping("/check/email")
    public Result checkEmail(@RequestParam String email) {
        Boolean existed = adminService.existEmail(email); // 调用服务层的方法检查邮箱是否已存在
        return existed ? Result.error() : Result.success(); // 根据检查结果返回相应的响应结果
    }

    /*
     * 检查用户名是否存在的接口
     * 当GET请求发送到"/check/username"时，接收一个username参数
     * 调用adminService的existUsername方法检查该用户名是否已存在
     * 如果用户名已存在，返回错误的响应结果；否则，返回成功的响应结果
     */
    @GetMapping("/check/username")
    public Result checkUsername(@RequestParam String username) {
        Boolean existed = adminService.existUsername(username); // 调用服务层的方法检查用户名是否已存在
        return existed ? Result.error() : Result.success(); // 根据检查结果返回相应的响应结果
    }
}